package com.leilei;

import lombok.Data;

import java.util.ArrayList;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author lei
 * @create 2023-04-06 09:29
 * @desc 聚集区域
 **/
@Data
public class CollectPolygonArea<V> {

    /**
     * 多边形区域外圈的点
     */
    private LinkList<MapPoint> points;

    /**
     * 内部聚集的数据
     */
    private Set<LocationBase<V>> locationBases;

    /**
     * 最大经度
     */
    private Integer maxLongitude;

    /**
     * 最大纬度
     */
    private Integer maxLatitude;

    /**
     * 最小经度
     */
    private Integer minLongitude;

    /**
     * 最小纬度
     */
    private Integer minLatitude;

    /**
     * 圆心
     */
    private MapPoint cycleCenter;

    /**
     * 半径
     */
    private Double radius;

    /**
     * 是否存活
     */
    private boolean live;

    /**
     * 计算中定位点是否是归属于当前区域
     */
    private boolean belong;


    /**
     * 区域ID 调试使用
     */
    private transient Long id;

    /**
     * 转换前端对象 屏蔽自身内部双向链表细节
     *
     * @param extendDistance
     * @return PolygonMapAreaVO
     * @author lei
     * @date 2023-03-20 15:25:37
     */
    public CollectPolygonAreaVO<V> po2vo(double extendDistance) {
        CollectPolygonAreaVO<V> collectPolygonAreaVO = new CollectPolygonAreaVO<>();
        collectPolygonAreaVO.setFixedPoints(this.points.getList());
        collectPolygonAreaVO.setExtendFixedPoints(CollectCalcUtil.extendPoints(collectPolygonAreaVO.getFixedPoints(), extendDistance));
        collectPolygonAreaVO.setLocationBases(this.locationBases);
        collectPolygonAreaVO.setMaxLongitude(this.maxLongitude);
        collectPolygonAreaVO.setMaxLatitude(this.maxLatitude);
        collectPolygonAreaVO.setMinLongitude(this.minLongitude);
        collectPolygonAreaVO.setMinLatitude(this.minLatitude);
        collectPolygonAreaVO.setCycleCenter(this.cycleCenter);
        collectPolygonAreaVO.setRadius(this.radius);
        return collectPolygonAreaVO;
    }
}
